home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / DSKEL-ID.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-22  |  7.6 KB  |  354 lines

  1. //                           DSKEL-ID
  2.  
  3.  
  4. //**********************
  5. //*****  Includes  *****
  6. //**********************
  7.  
  8. #include <proto/all.h>
  9. #include <stdio.h>
  10.  
  11. #include <string.h>
  12. #include <tempest/headers.h>
  13.  
  14. //********************************
  15. //*****  Structures/Defines  *****
  16. //********************************
  17.  
  18. struct MyMessage
  19.  {
  20.   struct Message Msg;
  21.   struct User User;
  22.   char text[255];
  23.   char text1[255];
  24.   int car,Value,Data;
  25.   long LongValue;
  26.   int  IntValue;
  27.  };
  28.  
  29. struct User User;
  30. struct MsgPort *MyPort = NULL;
  31. struct MyMessage *msg;
  32. struct node_info nody;
  33. struct Catalog Catalog;
  34. struct File_Area File_Area[41];          // To Read Files.Data
  35.  
  36. #define DROP if(EXIT_FLAG) CloseStuff();
  37.  
  38. void CloseStuff();
  39. void input(char mstring[],int len);
  40. int  DOORIO();
  41. void GetStr(char s[],int opt);
  42. void showfile(char mstring[]);
  43.  
  44. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,first = 0;
  45. char DOOR_MSG [255],DOOR_MSG1[255],MyName[255],st[100];
  46.  
  47. //*****************************
  48. //*****  PL (Print Line)  *****
  49. //*****************************
  50.  
  51. void pl(fmt,a1,a2)
  52. char *fmt;
  53.  {
  54.   char s[255];
  55.   sprintf(s,fmt,a1,a2);
  56.   DOOR_DATA=1; strcpy(DOOR_MSG,s); DOORIO();
  57.  }
  58.  
  59. //******************
  60. //*****  Main  *****
  61. //******************
  62.  
  63. void main(int argc,char *argv[])
  64. {
  65.  char string[255],string1[255],string2[255],ext[255];
  66.  register int x,y,i,file,number,NODE;
  67.  if(!DoorStart(argv[1])) { PutStr("[os2] Tempest Door\n"); exit(0); }
  68.  
  69.  
  70. //***************************
  71. //*****  Load Pointers  *****
  72. //***************************
  73.  
  74.  NODE = atoi(argv[1]);
  75.  
  76.  sprintf(string,"NODE:NodeInfo_%d",NODE);
  77.  for(x=1;x<4;x++)
  78.   {
  79.    file=Open(string,MODE_OLDFILE);
  80.    if(file!=0)
  81.     {
  82.      Read(file,(char *)&nody,sizeof(struct node_info));
  83.      Close(file);
  84.      break;
  85.     }
  86.   }
  87.  
  88. //****************************
  89. //*****  Load File.Data  *****
  90. //****************************
  91.  
  92.  GetStr(string1,0);
  93.  sprintf(string2,"%sSetup/Files.DATA",string1);
  94.  file=Open(string2,MODE_OLDFILE);
  95.  i=0;
  96.  do
  97.   {
  98.    Read(file,(char *)&File_Area[i], sizeof(struct File_Area));
  99.    i++;
  100.   }
  101.  while(i<40);
  102.  Close(file);
  103.  
  104.  pl("\r\n[DSKEL-ID v1.0File iD'er     By The SkeletoN [08-10-93]\r\n");
  105.  pl("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
  106.  
  107.  CONTINUE:
  108.  
  109.  pl("\r\n[Return = QuitEnter File Number: ");
  110.  input(string1,4);
  111.  DROP;
  112.  if(string1[0] == NULL) CloseStuff();
  113.  
  114.  number=atoi(string1);
  115.  ReadCatalog(User.FB_J,number);
  116.  
  117.  pl("\r\nFileName%s\r\n",Catalog.FileName);
  118.  x=strlen(Catalog.FileName);
  119.  sprintf(ext,"%c%c%c%c",Catalog.FileName[x-4],Catalog.FileName[x-3],Catalog.FileName[x-2],Catalog.FileName[x-1]);
  120.  
  121.  if(ext[0]=='.')
  122.   {
  123.    ext[1]=toupper(ext[1]);
  124.    if(ext[1]=='Z')
  125.     {
  126.      strcpy(string,Catalog.FileName);
  127.  
  128.      x=OnlineFile(User.FB_J,string);
  129.      if(x==1)
  130.       {
  131.        pl("\r\nWorking...\r\n\r\n");
  132.        sprintf(string2,"T:iD.txt-%d",NODE);
  133.        sprintf(string1,"UNZIP >%s -cq %s *.diz",string2,string);
  134.        Execute(string1,0L,0L);
  135.        showfile(string2);
  136.        DeleteFile(string2);
  137.       }
  138.     }
  139.   }
  140.  goto CONTINUE;
  141. }
  142.  
  143.  
  144.  
  145. int OnlineFile(Area,Filename)
  146. int Area;
  147. char Filename[];
  148. {
  149.  char string1[100],final[80];
  150.  int stat,x;
  151.  FILE *in;
  152. // stat=ACCESS(Area);
  153. // if(stat!=1)
  154. //  {
  155.    sprintf(final,"%s%s",File_Area[Area].Path,Filename);
  156.    if(access(final,0L)==0)
  157.     {
  158.      strcpy(Filename,final);
  159.      return(1);
  160.     }
  161. //  }
  162.  x=0;
  163.  while(x<40)
  164.   {
  165. //   stat=ACCESS(x);
  166. //   if(stat==1) goto NOPE;
  167.    sprintf(final,"%s%s",File_Area[x].Path,Filename);
  168.    if(access(final,0L)==0)
  169.     {
  170.      strcpy(Filename,final);
  171.      return(1);
  172.     }
  173.    NOPE:
  174.    x++;
  175.   }
  176.  sprintf(final,"%sDownloads.opt",nody.SystemDataInfo->OptionalDirPath);
  177.  in=fopen(final,"r");
  178.  if(in==NULL)
  179.   {
  180.    return(0);
  181.   }
  182.  while(fgets(string1,79,in)!=NULL)
  183.   {
  184.    string1[strlen(string1)-1] = '\0';
  185.    sprintf(final,"%s%s",string1,Filename);
  186.    if(access(final,0)==0)
  187.     {
  188.      fclose(in);
  189.      strcpy(Filename,final);
  190.      return(1);
  191.     }
  192.   }
  193.  fclose(in);
  194.  return(0);
  195. }
  196.  
  197.  
  198.  
  199.  
  200.  
  201. //********************************
  202. //*****  Read Catalog Entry  *****
  203. //********************************
  204.  
  205. ReadCatalog(int Area,int Slot)
  206. {
  207.  char string[80],temp[50];
  208.  long size,FilePos;
  209.  int in,stat;
  210.  
  211.  Slot--;
  212.  sprintf(temp,"%d",Area);
  213.  sprintf(string,"%sCatalog.%s",nody.SystemDataInfo->CatalogsPath,temp);
  214.  in=Open(string,MODE_OLDFILE);
  215.  size=(long)sizeof(struct Catalog);
  216.  FilePos=(long)size*(long)Slot;
  217.  if(in==0)
  218.   {
  219.    pl("\r\nNo files have been uploaded yet.\r\n\r\n");
  220.    CloseStuff();
  221.   }
  222.  stat=Seek(in,FilePos,OFFSET_BEGINNING);
  223.  if(stat!=0)
  224.   {
  225.    Close(in);
  226.    pl("\r\nFile Number out of range!\r\n\r\n");
  227.    CloseStuff();
  228.   }
  229.  setmem(&Catalog,sizeof(struct Catalog),NULL);
  230.  stat=Read(in,(char *)&Catalog,sizeof(struct Catalog));
  231.  if(stat==0)
  232.   {
  233.    Close(in);
  234.    pl("\r\nNo More Files!\r\n\r\n");
  235.    CloseStuff();
  236.   }
  237.  Close(in);
  238.  return(0);
  239. }
  240.  
  241.  
  242.  
  243.  
  244. //*************************
  245. //*****  Close Stuff  *****
  246. //*************************
  247.  
  248. void CloseStuff()
  249. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  250.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  251.  if(MyPort) DeletePort(MyPort);
  252.  exit(0); }
  253.  
  254. //************************
  255. //*****  Door Start  *****
  256. //************************
  257.  
  258. DoorStart(char node[])
  259. {
  260.  struct MsgPort *HisPort;
  261.  EXIT_FLAG = 0;
  262.  strcpy(st,node);
  263.  strcat(st,":TEMPEST_DOOR");
  264.  HisPort = FindPort(st);
  265.  if(HisPort==NULL) return (FALSE);
  266.  strcpy(MyName,node);
  267.  strcat(MyName,":DOOR_PORT");
  268.  MyPort = CreatePort(MyName,0L);
  269.  if(MyPort==NULL)
  270.   {
  271.    PutStr("Cant open port");
  272.    return(int)FALSE;
  273.   }
  274.  DOORIO();
  275.  return (int)TRUE;
  276. }
  277.  
  278. //********************
  279. //*****  DoorIO  *****
  280. //********************
  281.  
  282. int DOORIO()
  283. {
  284.  struct MsgPort *HisPort;
  285.  struct MyMessage message;
  286.  int UPDATE;
  287.  if(EXIT_FLAG) return 0;
  288.  UPDATE=0;
  289.  HisPort = FindPort(st);
  290.  if(HisPort!=NULL)
  291.   {
  292.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  293.    message.Msg.mn_Length = sizeof(message);
  294.    message.Msg.mn_ReplyPort = MyPort;
  295.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  296.    message.car   = 0;
  297.    message.Data  = DOOR_DATA;
  298.    message.Value = DOOR_VALUE;
  299.    message.IntValue = DOOR_VALUE1;
  300.    strcpy(message.text,DOOR_MSG);
  301.    strcpy(message.text1,DOOR_MSG1);
  302.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  303.    Wait(1 << MyPort->mp_SigBit);
  304.    GetMsg(MyPort);
  305.    DOOR_DATA  = message.Data;
  306.    DOOR_VALUE = message.Value;
  307.    DOOR_VALUE1 = message.IntValue;
  308.    strcpy(DOOR_MSG,message.text);
  309.    strcpy(DOOR_MSG1,message.text1);
  310.    CopyMem(&message.User,&User,sizeof(struct User));
  311.    first=1;
  312.    UPDATE=0;
  313.    if(message.car) EXIT_FLAG=1;
  314.   }
  315.  return 0;
  316. }
  317.  
  318. //*********************
  319. //*****  Get Key  *****
  320. //*********************
  321.  
  322. void getkey(char character[])
  323. { strcpy(DOOR_MSG,'\0'); DOOR_DATA=31; DOORIO(); strcpy(character,DOOR_MSG); DROP; }
  324.  
  325. //*********************************
  326. //*****  GetStr (Get String)  *****
  327. //*********************************
  328.  
  329. void GetStr(char s[],int opt)
  330. { DOOR_DATA=15; DOOR_VALUE=opt; strcpy(s,'\0'); DOORIO(); strcpy(s,DOOR_MSG); }
  331.  
  332. //*******************
  333. //*****  Input  *****
  334. //*******************
  335.  
  336. void input(char mstring[],int len)
  337. { DOOR_DATA=40; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); DOORIO();
  338.  strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); }
  339.  
  340. //************************
  341. //*****  Line Input  *****
  342. //************************
  343.  
  344. void LineInput(char ostring[],char mstring[],int len)
  345. { DOOR_DATA=41; DOOR_VALUE=len; strcpy(DOOR_MSG,mstring); strcpy(DOOR_MSG1,ostring);
  346.  DOORIO(); strcpy(mstring,DOOR_MSG); strcpy(DOOR_MSG,'\0'); strcpy(DOOR_MSG1,'\0'); DROP; }
  347.  
  348. //***********************
  349. //*****  Show File  *****
  350. //***********************
  351.  
  352. void showfile(char mstring[])
  353. { DOOR_DATA=30; strcpy(DOOR_MSG,mstring); DOORIO(); }
  354.